Домашнее задание 4.1. Задача о расстановке ферзей. Разгуляева А.И.#4
Домашнее задание 4.1. Задача о расстановке ферзей. Разгуляева А.И.#4
Conversation
Godrik0
left a comment
There was a problem hiding this comment.
Странно, что решение с использованием множеств работает для меньших n в сравнении со вторым решением
| @@ -0,0 +1,41 @@ | |||
| def backtrack(row, columns, diagonal1, diagonal2): | |||
| if row == n: | |||
There was a problem hiding this comment.
Переменная n не объявлена нигде в функции и не передается как её аргумент. Сейчас код берет n из глобального цикла, но стоит написать queens_simple(10) и он падает:
Traceback (most recent call last):
File "main.py", line 41, in <module>
queens_simple(10)
File "main.py", line 36, in queens_simple
return backtrack(0, set(), set(), set())
File "main.py", line 2, in backtrack
if row == n:
NameError: name 'n' is not defined
| def solve_recursive(n, row, board, solutions): | ||
| # рекурсивно находит все решения | ||
| if row == n: | ||
| solutions.append(board) |
There was a problem hiding this comment.
Тут добавляется не копия доски board, а ссылка на один и тот же список. При этом при изменении board в следующих ветках рекурсии, сохраненные решения так же изменятся.
Лучше использовать счетчик, так как копирование board не имеет смысла и требует дополнительных ресурсов.
|
|
||
| ## 1. Переборное решение (bruteforce) | ||
|
|
||
| **Сложность:** O(N! * N²) |
There was a problem hiding this comment.
Для написания формул можно использовать $$:
| - Фактическое количество рекурсивных вызовов меньше N! | ||
| - Проверка валидности за O(N) на каждом уровне | ||
|
|
||
| **Применение:** Работает для N ≤ 15-20 за нормальное время |
There was a problem hiding this comment.
Вы уверены, что оно будет работать для 20?...
Добавлено домашнее задание 4.1. Задача о расстановке ферзей
Разгуляева А.И.